package com.cvtt.xmpp.cvttmessage;

import java.util.Vector;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import android.util.Log;

public class CVTTMessageParseHandler extends DefaultHandler {
	private CVTTMessage cvttMsg = new CVTTMessage();
	private Vector<CVTTUserNode> userNodeList = new Vector<CVTTUserNode>();

	public CVTTMessage getCVTTMessage() {
		cvttMsg.setToList(userNodeList);
		return cvttMsg;
	}

	private StringBuffer buffer = new StringBuffer();

	/**
	 * <br>
	 * 方法说明：文件打开时调用 <br>
	 * 输入参数： <br>
	 * 返回类型：
	 */
	@Override
	public void startDocument() {
		Log.d("==xx", "***开始解析***");
	}

	/**
	 * <br>
	 * 方法说明：当遇到开始标记时调用 <br>
	 * 输入参数： <br>
	 * 返回类型：
	 */
	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

		if (localName.equals("to")) {
			CVTTUserNode object = new CVTTUserNode();
			for (int i = 0; i < attributes.getLength(); i++) {
				 if (attributes.getLocalName(i).equals("uid")) {
					object.setUID(attributes.getValue(i));
				}
			}
			userNodeList.addElement(object);
		}
		else if (localName.equals("from")) {
			for (int i = 0; i < attributes.getLength(); i++) {
				 if (attributes.getLocalName(i).equals("uid")) {
					cvttMsg.setFromUid(attributes.getValue(i));
				}
			}
		}
	}

	/**
	 * <br>
	 * 方法说明：当分析器遇到无法识别为标记或者指令类型字符时调用 <br>
	 * 输入参数： <br>
	 * 返回类型：
	 */
	@Override
	public void characters(char[] ch, int offset, int length) throws SAXException {
		buffer.append(ch, offset, length);
		Log.d("==xx", "节点数据：" + buffer.toString());
	}

	/**
	 * <br>
	 * 方法说明：当遇到节点结束时调用 <br>
	 * 输入参数： <br>
	 * 返回类型：
	 */
	@Override
	public void endElement(String uri, String localName, String qName) {

		if (localName.equals("type")) {
			cvttMsg.setType(buffer.toString().trim());
		}
		else if (localName.equals("content")) {
			cvttMsg.setContent(buffer.toString().trim());
		}
		else if (localName.equals("attachment")) {
			cvttMsg.setAttachment(buffer.toString().trim());
		}
		else if (localName.equals("remark")) {
			cvttMsg.setRemark(buffer.toString().trim());
		}
		else if (localName.equals("status")) {
			cvttMsg.setStatus(buffer.toString().trim());
		}
		else if (localName.equals("audiotime")) {
			cvttMsg.setAudioTime(buffer.toString().trim());
		}

		buffer.setLength(0);
	}

	/**
	 * <br>
	 * 方法说明：当到文档的末尾调用 <br>
	 * 输入参数： <br>
	 * 返回类型：
	 */
	@Override
	public void endDocument() {
		Log.d("==xx", "****文件解析完毕****");
	}

}
